#include "factorymodel.h"

#ifndef INIT_CREATE_FUNC_MACRO_NO_PARA

#define INIT_CREATE_FUNC_MACRO_NO_PARA(className) createFunc.insert(DK_##className,[](const QString& para)->QWidget*{Q_UNUSED(para) return new className;});

#endif


#ifndef INIT_CREATE_FUNC_MACRO

#define INIT_CREATE_FUNC_MACRO(className) createFunc.insert(DK_##className ,[](const QString& para)->QWidget* { \
if (para.isEmpty()){    \
    return new className;   \
}   \
else {  \
    return new className(para); \
}   \
}); \

#endif

FactoryModel::FactoryModel(QObject *parent) : QObject(parent)
{
    initCreateFunc();

}

QWidget *FactoryModel::createWid(const QString &widgetName,const QString &parameter)
{
    if(createFunc.contains(widgetName)){
            return createFunc.value(widgetName)(parameter);
    }else{
        qDebug()<<__FUNCTION__<<"err";
    }

    return nullptr;
}

#include "ad_classmgrlist.h"
#include "ad_oneclassinfo.h"
#include "ad_studentmgrlist.h"
#include "ad_userinfo.h"
#include "ad_usermgrlist.h"
#include "ST_onestudentinfo.h"
#include "te_classgrade.h"
#include "log.h"
#include "ad_coursemgrlist.h"
#include "ad_professionalsmgrlisr.h"




void FactoryModel::initCreateFunc()
{

//    createFunc.insert("DK_##className" ,[](const QString& para)->QWidget* {
//            return new className(para);
//        }
//    });



    INIT_CREATE_FUNC_MACRO(AD_ClassMgrList)
    INIT_CREATE_FUNC_MACRO_NO_PARA(AD_OneClassInfo)
    INIT_CREATE_FUNC_MACRO_NO_PARA(AD_StudentMgrList)
    INIT_CREATE_FUNC_MACRO_NO_PARA(AD_UserInfo)
    INIT_CREATE_FUNC_MACRO_NO_PARA(AD_userMgrList)
    INIT_CREATE_FUNC_MACRO_NO_PARA(ST_OneStudentInfo)
    INIT_CREATE_FUNC_MACRO_NO_PARA(TE_ClassGrade)
    INIT_CREATE_FUNC_MACRO_NO_PARA(Log)
    INIT_CREATE_FUNC_MACRO_NO_PARA(AD_CourseMgrList)
    INIT_CREATE_FUNC_MACRO_NO_PARA(AD_ProfessionalsMgrLisr)



}
